用 google 尋 ssh vnc 可找到許多怎麼利用 putty , sshd 連 VNC,
常常有看沒有懂,沒懂也可運作;但跳兩層 ssh 來連VNC,
就得錯誤嘗試幾下;用力試了一下,有成功了,趕快記下來備忘。
用 google 尋 ssh vnc 可找到許多怎麼利用 putty , sshd 連 VNC,
以下圖為例:
192.168.0.0/24 的子網,是透過 NAT 172.16.0.1 連出去,
若 PC 172.16.0.5 想連 NAT 內的 192.168.0.10 的 VNC,
就可利用 google 找到的範例來做設定;
而 PC windows 的環境,都是以 putty 或 pietty 來做例子,
而且例子都是以圖形界面來設定,
自己想直接用 command-line 來直接下 Listen, Forward的指令,
參考了 ssh 的指令,發現對 pietty, putty 是通用,
在 windows 的 CMD 下以下指令連到 172.16.0.1 Linux,建立了通道後,
pietty -L 5901:192.168.0.10:5900 user@172.16.0.1
在 vncviewer 鍵入 localhost:1 就可 VNC 到 192.168.0.10
-L 後的 5901 ,是 開了 PC windows 本身 5901 port,
就是 vncviewer 連 localhost:1 的所在。
後面的 192.168.0.10:5900 是 NAT 裡 PC 的 VNC 的 IP 及 Port,
所以,vncviewer -> localhost:5901 -> 透過 ssh 22 port 到 linux ->
NAT 192.168.0.10 的 5900 port。
上述是蠻單純來看 NAT 內的 VNC,或者透過 Linux 的 ssh 來防止被截封包的做法。
然而,敝組織,把所有組織內都納入 NAT,連 Server 也不例外,
如下圖 172.16.0.3 的 Linux ,外部以 1.2.3.4 來存取 Server。
由於敝單位因任務、狀況的需要,得在此 NAT 內再畫分一個 NAT 的子網,
透過 172.16.0.1 Linux ,再加網卡 192.168.0.1 ,做為 192.168.0.0/24 的 gateway:
想達到的目的是,從家裡的 windows PC 可連結到 NAT 中的 NAT 中的 VNC。
基本上連結流程是:
Home -> 1.2.3.4(172.16.0.3) -> 172.16.0.1(192.168.0.1) -> 192.168.0.10
為理解方便,以反向來說明,較容易
先從 1.2.3.4(172.16.0.3) 這台 Linux 來建立與 172.16.0.1(192.168.0.1) Linux的通道開始
在 1.2.3.4(172.16.0.3) 建入以下指令:
ssh -g -L localhost:5901:192.168.0.10:5900 user@172.16.0.1
這樣在 1.2.3.4(172.16.0.3) 自己的 localhost:5901 就是 192.168.0.10:5900 了。
這個指令跟上一個,在 windows 上下的 pietty(putty)的指令,基本上是一樣的,
-L 的後面 localhost: 是可省略,-g 是允遠端主機來連結到本機的轉扯port。
而在 PC 端建入以下 pietty(putty)的指令,建立與 1.2.3.4(172.16.0.3) 的通道:
pietty -L 5901:localhost:5901 user@1.2.3.4
其實這跟第一例,是一樣的的語法,剛開始搞不清楚中間要設什麼,
以為是 172.16.0.1 或什麼的,結果都不行,原來是要設 localhost 就可順利建立連線!
下圖將 port 標示出來,以及先瞭解 linux 上下的 ssh -g -L .... 這指令,才弄清楚。
以更白話的流程是:
vncviewer -> localhost:5901 -> 透過 ssh 22 port 到 linux 1.2.3.4 -> (非 ssh 的連) localhost 5901 -> 透過 ssh 22 port 到 linux 172.16.0.1 -> localhost 的 5901 -> NAT 192.168.0.10 的 5900 port
一般要連的程序,就只要
pietty -L 5901:localhost:5901 user@1.2.3.4
ssh -g -L localhost:5901:192.168.0.10:5900 user@172.16.0.1
就可順利 ssh 到 NAT 中的 NAT 的 VNC 了。